package singleton;

public class Singleton {

    /**
     * 1:使用场景: 只能有一个实例
     * (1)开发场景:许可证license
     * (2)生活场景:车牌号(一辆车只有一个车牌)
     *2:优点
     *  (1)减少内存开销
     *  (2)避免对资源的多重占用
     * 3:缺点
     *  (1)不能复用,没有接口和继承
     *
     * */
    private  static  Singleton singleton;
    private  Singleton(){}
    /*
    懒汉,线程不安全
    public static  Singleton getInstance(){
        if (singleton==null){
            singleton =new Singleton();
            return singleton;
        }
        return  singleton;
    }*/

    /*
    懒汉,线程安全
    优点：第一次调用才初始化，避免了内存浪费。
    缺点：必须加锁 synchronized 才能保证单例，但加锁会影响效率。
    public static  synchronized Singleton getInstance(){
        if (singleton==null){
            singleton =new Singleton();
            return singleton;
        }
        return  singleton;
    }*/

    private  static  Singleton singletonHungry =new Singleton();

   /*
   饿汉,线程安全
   优点：没有加锁，执行效率高。
   缺点：类加载时就初始化，内存浪费。
   public static Singleton getInstance() {
        return instance;
    }*/

}
